#ifndef __EVENT_NOTIFIER__
#define __EVENT_NOTIFIER__

/*! \enum event_node_api_ret_value
 *
 *  Detailed description
 */
enum event_node_api_ret_value {
    EN_RET_OK = 0,
    EN_RET_ERR_ARG,
    EN_RET_FULL,
};

struct notifier_node
{
    int node_id;
    /* 事件类型 */
    int event_type;
    /* 回调函数 */
    void* (*event_callback)(void *);
    void*   event_callback_arg;
    /* 同个事件按优先级通知 */
    int priority;
    //struct notifier_node *next;
};

struct notifier_manager
{
    /* 通知链 */
    struct notifier_node *notifiers_head;
    /* 通知链长度，以及当前 注册的事件 */
    int event_notifier_size;
    int event_notifier_cur_size;
    struct notifier_manager *next;
};

#define API

// 初始化事件通知器
API int event_notifier_init(struct notifier_node *header, int size);

// 获取当前注册的事件数量
int event_notifier_get_cur_event_cnt(void);

// 获取当前事件通知器的最大容量
int event_notifier_get_size(void);

// 注册一个事件（默认优先级）
API int event_notifier_register_event(int event_type,
                                  void* (*event_callback)(void *event_callback_arg),
                                  void *event_callback_arg);

// 注册一个事件，并指定注册事件的优先级（如果事件存在，则设置为新的优先级）
API int event_notifier_register_event_with_priority(int event_type,
                                                    int priority,
                                                    void* (*event_callback)(void *event_callback_arg),
                                                    void *event_callback_arg);

// 反注册一个事件
API int event_notifier_unregister_event(int event_type,
                                  void* (*event_callback)(void *event_callback_arg),
                                  void *event_callback_arg);

// 通知事件发生，这会导致注册到事件通知上的处理函数依次执行。
API int event_notify(int event_type);

#endif 
